﻿/******************************************************************************* 
  Copyright (C), 1988-2020, zeno Tech. Co., Ltd.
  Description:   IVS模块  
  Function List:     
  History:
    <huangzhendi -- 2014-09-26>  创建
*******************************************************************************/ 
#ifndef ZNIVS_H
#define ZNIVS_H

#ifdef __cplusplus
extern "C" {
#endif

/*=============================================================================
                                 Includes                                  
 =============================================================================*/

/*=============================================================================
                               Macro Definition
 =============================================================================*/ 
#define IVS_RATIO       		8192        /* 算法比例因子 */
#define IVS_MAX_FACEAREA		3			/* 银行参数start */
#define IVS_MAX_POSE_GRANDLINE  4           /*骨架地面标定线*/
/*=============================================================================
                        Local Structures and Typedef 
 =============================================================================*/
/* 算法子类型 */
typedef enum
{
    IVS_TYPE_BZS            = 0,               /* 周界算法 */
    IVS_TYPE_FACE           = 1,              /* 人脸算法 */ 
    IVS_TYPE_PLATE          = 2,             /* 车牌算法 */
    IVS_TYPE_PARK           = 3,              /* 车位算法 */
    IVS_TYPE_VQD            = 4,               /* VQD算法 */ 
    IVS_TYPE_HDT            = 5,               /* 人头检测算法 */ 
    IVS_TYPE_ATMPANEL       = 6,	        /*ATM面板算法*/
    IVS_TYPE_ATMFACE        = 7,           /*ATM人脸算法*/
    IVS_TYPE_ATMTANK        = 8,           /*ATM防护舱算法*/
    IVS_TYPE_SSBSLAT        = 8,           /*自助厅斜视算法*/
    IVS_TYPE_SSBTOP         = 10,            /*自助厅顶视算法*/
    IVS_TYPE_DISTRICT       = 11,          /*加钞间算法*/
    IVS_TYPE_DEEPCNT        = 12,           /*深度人数*/
    IVS_TYPE_HUMAN          = 13,				/*人形检测*/
    IVS_TYPE_TRACKEVNBHV    = 14,       /*跟踪事件行为算法*/
    IVS_TYPE_BODYEVNBHV     = 15,        /*姿态行为算法*/
    IVS_TYPE_COMP           = 16,              /*人脸比对算法*/
    IVS_TYPE_HORIZON        = 17,           /*地平线算法*/
	IVS_TYPE_DG             = 18,                /*格灵深瞳算法*/
    IVS_TYPE_AUTO           = 19,              /*自运行算法*/
    IVS_TYPE_MAX,
}IVS_algType_t;

/*分析检测器类型*/
typedef enum
{
    DET_TYPE_NONE=0,     /*无外部检测信息*/
    DET_TYPE_CHECK,       /*单纯事件检测*/
    DET_TYPE_TRACKCHEKC,  /*跟踪加检测*/
    DET_TYPE_INSIDE,   /*内部算法（自有/第三方）*/
    DET_TYPE_MAX
}IVS_detType_t;

/* 版本信息 */
typedef struct
{
	char	name[32];	        /* 组件名称 */
	int		major;		        /* 主版本号，架构变动时增加 */
	int		minor;		        /* 次版本号，接口变化或严重缺陷修正时增加 */
	int		revision;	        /* 修订版本号，缺陷修正时增加 */
	int		svn;		        /* svn版本号，记录上述3版本号变更时对应的svn版本号 */
	char	date[32];	        /* 编译日期，使用__DATE__宏 */
}IVS_version_t;

/* 矩形 */
typedef struct
{
	unsigned int left;
	unsigned int top;
	unsigned int right;
	unsigned int bottom;
}IVS_rect_t;


typedef struct
{
    unsigned int width;       /* 图像数据宽 */
    unsigned int height;      /* 图像数据高 */
} IVS_picSize_t;


/* 码流属性 */
typedef struct
{
    unsigned int frameWidth;
    unsigned int frameHeight;
} IVS_streamParam_t;


/* 点坐标 */
typedef struct
{
    int x;
    int y;
} IVS_point_t;


/* 人脸跟踪信息 */
typedef struct
{
    char frontalFaceFlag;           /* 正脸标示，0：正脸 非0：侧脸 */
} IVS_regionFace_t;


/* 区域信息 */
typedef struct
{
	int	    	 pointNum;          /* 区域信息点数 */
	IVS_point_t  points[20];        /* 区域点坐标 */
	int 		 regionType;        /* 区域类型，定义件IVS_regionType_t */
	int          algType;           /* 算法类型，定义见IVS_algType_t */
    int          id;                         /* 人脸Id */
	union
	{
        IVS_regionFace_t faceEvent;     /* 人脸跟踪信息 */
	};
}  IVS_monitorRegion_t;


/* 区域数据 */
typedef struct
{
    int warningNum;                             /* 告警区域数 */
    int trackedNum;                             /* 跟踪区域数 */
    IVS_monitorRegion_t	*pWarningRegions;       /* 告警区域 */
    IVS_monitorRegion_t	*pTrackedRegions;       /* 跟踪区域 */
    unsigned long long  pts;                    /* 时间戳 */
} IVS_region_t;

typedef enum 
{
    IVS_FORMAT_YUVSP420 = 0
} IVS_imageFormat_t;

/* 帧数据 */
typedef struct
{
	unsigned char      	*pVirAddr;		/* 虚拟地址 */
    unsigned long long 	phyAddr;		/* 物理地址 */
    unsigned int       	width;			/* 图像宽度 */
    unsigned int       	height;			/* 图像高度 */
    unsigned int       	stride;			/* 图像数据跨距 */
	unsigned int 	   	format;			/* 图像格式,定义见IVS_imageFormat_t */
	unsigned long long 	pts;            /* 时间戳 */
	IVS_region_t 		*pIvsRegion;    /* 区域信息 */
} IVS_frameInfo_t;

typedef enum
{
    IVS_JPEG_SNAPTYPE_HIGH = 0,         /* 智能抓图类型--JPEG大图 */
    IVS_JPEG_SNAPTYPE_LOW,              /* 智能抓图类型--JPEG小图 */
    IVS_BMP_SNAPTYPE_LOW,               /* 智能抓图类型--BMP小图 */
    IVS_RGB_SNAPTYPE_LOW,               /* 智能抓图类型--RGB小图 */ 
    IVS_YUV_SNAPTYPE_LOW,               /* 智能抓图类型--yuv小图 */
    IVS_SNAPTYPE_MAX,
}IVS_picSnapType_t;

typedef struct
{
    IVS_picSnapType_t picType;          /* 智能抓图类型 */
    IVS_rect_t jpegRect;                /* 智能抓图区域 */    
    char *pYuvData;                     /* 智能抓图数据 */
    int matchPts;                       /* 是否需要匹配时间戳 */
    unsigned long long pts;             /* 时间戳 */
    unsigned int rgbDstWidth;       /* RGB抠图目标图像宽度 */
    unsigned int rgbDstHeight;      /* RGB抠图目标图像高度 */
}IVS_picInputInfo_t;

typedef struct
{
    char *pPicData;                     /* 智能抓图数据 */
    IVS_picSize_t picSize;              /* 图片尺寸 */
    unsigned int picDataLen;           /* 智能抓图数据长度 */
}IVS_picDataInfo_t;

typedef struct
{
    IVS_algType_t algType;              /* 算法类型 */
    IVS_picSize_t srcSize;              /* 原始图尺寸 */
    IVS_picSize_t optSize;              /* 算法最优尺寸 */ 
}IVS_resizeInfo_t; 
 
/* 算法初始化参数 */
typedef struct
{
    unsigned int algType;                      /* 算法类型 */ 

    IVS_picSize_t srcSize;                     /* 原始图尺寸 */ 

    /* 算法取帧间隔，0   ：不做控制，！0：取帧间隔，单位ms */
    unsigned int delayMs;
    
    /***************************************************************************
      Description:  获取抓图数据
      Input:        - pPriv: 用户自定义数据
                    - pPicInfo: 抓图参数数组
                    - picNum: 抓图数
      Output:       - pPicDataInfo：抓图数据数组
      Return:       0: 操作成功
                   -1: 操作失败
      Others:       仅IVS_GetResult中可以使用
    ***************************************************************************/
    int (*pAnalyserGetJpeg)(void *pPriv,
                            IVS_picInputInfo_t *pPicInfo, 
                            IVS_picDataInfo_t *pPicDataInfo,
                            int picNum);

    /* 不同类型图的缓存大小 */
    unsigned int highJpegLen;                   /* 大图缓存大小 */
    unsigned int lowJpegLen;                    /* jpeg小图缓存大小 */
    unsigned int bmpJpegLen;                    /* bmp小图缓存大小 */
    
    unsigned int snapHighJpeg;       /* 0: 不需要抓大图       1：需要抓大图 */

    void *pPriv;     /* 用户自定义数据 */
    
    /***************************************************************************
      Description:  抓拍数据帧
      Input:        无
      Output:       无
      Return:       0: 操作成功
                   -1: 操作失败
      Others:       仅IVS_GetResult中可以使用
    ***************************************************************************/
    int (*pAnalyserSnap)(void *pPriv);

    /***************************************************************************
      Description:  缩放图片
      Input:        - pPriv: 用户自定义数据
                    - pResizeInfo: 抓图参数
      Output:       无
      Return:       0: 操作成功
                   -1: 操作失败
      Others:       无
    ***************************************************************************/
    int (*pAnalyserResize)(void *pPriv, IVS_resizeInfo_t *pResizeInfo);
    
    /***************************************************************************
      Description:  获取帧数据
      Input:        - pPriv: 用户自定义数据
      Output:       - pIvsFrame: 帧数据
      Return:       0: 操作成功
                   -1: 操作失败
      Others:       无
    ***************************************************************************/
    int (*pGetFrame)(void *pPriv, IVS_frameInfo_t *pIvsFrame);

    /***************************************************************************
      Description:  释放帧数据
      Input:        - pPriv: 用户自定义数据
                    - isSnapFrame: 0 不需要抓图 1 需要抓图
      Output:       无
      Return:       0: 无报警事件
                    1: 有报警事件
                   -1: 操作失败
      Others:       无
    ***************************************************************************/
    int (*pPutFrame)(void *pPriv, int isSnapFrame);   

    /***************************************************************************
      Description:  获取时间戳对应帧数据
      Input:        - pPriv: 用户自定义数据
      				- pts: 时间戳
      Output:       - pIvsFrame: 帧数据
      Return:       0: 操作成功
                   -1: 操作失败
      Others:       无
    ***************************************************************************/
    int (*pGetPtsFrame)(void *pPriv, unsigned long long pts, IVS_frameInfo_t *pIvsFrame);

    /***************************************************************************
      Description:  释放时间戳对应帧数据
      Input:        - pPriv: 用户自定义数据
      Output:       - pIvsFrame: 帧数据
      Return:       0: 操作成功
                   -1: 操作失败
      Others:       无
    ***************************************************************************/
    int (*pPutPtsFrame)(void *pPriv, IVS_frameInfo_t *pIvsFrame);

	/***************************************************************************
      Description:  从底层释放时间戳对应的帧数据
      Input:        - pPriv: 用户自定义数据
      				- pts: 时间戳
      Output:       无
      Return:       0: 操作成功
                   -1: 操作失败
      Others:       无
    ***************************************************************************/
    int (*pFreeBottomPtsFrame)(void *pPriv, unsigned long long pts);
    
    /***************************************************************************
      Description:  获取抓图但不释放原始帧数据，允许同一张图多次抓取
      Input:        - pPriv: 用户自定义数据
                    - pPicInfo: 抓图参数数组
      Output:       - pPicDataInfo：抓图数据数组
      Return:       0: 操作成功
                   -1: 操作失败
      Others:       仅算法回调中可以使用
    ***************************************************************************/
    int (*pGetJpegNoRelease)(void *pPriv,
                            IVS_picInputInfo_t *pPicInfo, 
                            IVS_picDataInfo_t *pPicDataInfo);
    
    /***************************************************************************
      Description:  回调应用pack包
      Input:        - pData 数据地址
                    - dataLen 数据长度
                    - mode: 内存模式
      Output:       无
      Return:       !NULL: pack包句柄
                    NULL: 操作失败
      Others:       无
    ***************************************************************************/
    void* (*pMemoryAllocAndWrite)(void *pData,
                                  int dataLen,
                                  int mode);

    /***************************************************************************
      Function:     MEDIA_MemoryRelease
      Description:  回调应用pack包
      Input:        - hPack: pack包句柄
      Output:       无
      Return:       0: 操作成功
                   -1: 操作失败
      Others:       无
    ***************************************************************************/
    int (*pMemoryRelease)(void *hPack);
	
	void *pRelativeIvs;					/* 关联算法句柄 */
	unsigned int IvsRelativeMask;		/* 关联算法类型掩码 */
} IVS_createParam_t;


/* 经过检测线的方向 */
typedef enum
{
	IVS_DIR_L2R,	/* 从左到右 */
	IVS_DIR_R2L,	/* 从右到左*/
	IVS_DIR_BOTH,	/* 双向 */
} IVS_direction_t;

/* 区域类型 */
typedef enum 
{
    IVS_RGN_NULL = -1,
    IVS_RGN_ATM_WARN = 0,				/* 报警区域	多 */
    IVS_RGN_ATM_KEYBOARD,				/* 键盘区域 */
    IVS_RGN_ATM_CARDPORT,				/* 插卡口区域 */
    IVS_RGN_ATM_KEYMASK,				/* 键盘罩区域 */
    IVS_RGN_ATM_HUMAN,					/* 人员活动区域 多 */
    IVS_RGN_ATM_FACEHUMAN,				/* 人脸区域	面板右边 */
    IVS_RGN_ATM_OBJSIZE,				/* 目标区域 (最小检测尺寸) */
    IVS_RGN_ATM_SCREEN,					/* 屏幕区域	(没实现) */
    IVS_RGN_ATM_FORBIDON,	            /* 面板屏蔽区域 */
    IVS_RGN_ATM_PANELLINE,	            /* 面板梯度线 */
    
    IVS_RGN_SSBHALL_PROCESS = 15,       /* 自助厅处理区域 */   
    IVS_RGN_SSBHALL_WITHDRAWALS,        /* 自助厅取款区域 */ 
    IVS_RGN_SSBHALL_SHIELD,             /* 自助厅屏蔽区域 */ 
    IVS_RGN_SSBHALL_GRAND,              /* 自主厅地板区域 */ 
    
    IVS_RGN_DISTRICT_PROCESS,           /* 加钞间处理区域 */ 
    IVS_RGN_DISTRICT_CROSSLINE,         /* 加钞间检测线。 */ 
    IVS_RGN_DISTRICT_SHIELD,            /* 加钞间屏蔽区域 */ 

    IVS_RGB_BODY_CONNECT = 23,          /*人体关键点*/

    IVS_RGN_HEADCNT_PROCESS = 30,
    IVS_RGN_HEADCNT_CROSSLINE ,

    IVS_RGN_TOTAL,
}IVS_regionType_t;


/* 周界对象类型 */
typedef enum
{
    IVS_BZSOBJ_PERSON,		/* 人 */
    IVS_BZSOBJ_VEHICLE,	 	/* 车 */
    IVS_BZSOBJ_BICYCLE,	 	/* 非车 */
    IVS_BZSOBJ_UNKNOW,
}IVS_bzsObj_t;


/* 警戒线事件 */
typedef struct
{
	IVS_direction_t	direction;		/* 检测方向 */
    IVS_bzsObj_t objectType;        /*对象类型*/
} IVS_eventCrossLine_t;


/* 经过检测线的方向 */
typedef enum
{
	IVS_ODObj_Moved,	/* 物品遗留 */
	IVS_ODObj_Dropped,	/* 物品消失*/
} IVS_object_t;

/* 物品盗移*/
typedef struct
{
	IVS_object_t	objectInfo;		    /* 检测方向 */
    IVS_bzsObj_t objectType;        /*对象类型*/
} IVS_eventObject_t;


/* 区域检测动作 */
typedef enum
{
	IVS_REGIONACTION_APPEAR		= 1 << 0,	/* 出现 */
	IVS_REGIONACTION_DISAPPEAR	= 1 << 1,	/* 消失 */
	IVS_REGIONACTION_INSIDE		= 1 << 2,	/* 在区域内 */
	IVS_REGIONACTION_CROSS		= 1 << 3,	/* 穿越区域 */
} IVS_regionAction_t;


/* 区域检测方向 */
typedef enum
{ 
	IVS_REGIONDIR_ENTER,		           /* 进入 */
	IVS_REGIONDIR_LEAVE,		           /* 离开 */
	IVS_REGIONDIR_BOTH,		               /* 双向 */
} IVS_regionDirection_t;

/*区域密度控制*/
typedef enum
{ 
	IVS_DENSITYCTL_GREATER=1,		           /* 大于 */
	IVS_DENSITYCTL_SMALLER=2,		           /* 小于 */
	IVS_DENSITYCTL_EQUAL=3,		                /* 等于 */
	IVS_DENSITYCTL_NOEQUA=4,		           /* 不等于 */
} IVS_DensityCtl_t;

/* 警戒区入侵事件 */
typedef struct									
{
	IVS_regionAction_t		action;			 /* 检测动作 */
	IVS_regionDirection_t   direction;		 /* 检测方向 */
    IVS_bzsObj_t objectType;        /*对象类型*/
} IVS_eventCrossRegion_t;


/* 流量统计，针对人、车等物体 */
typedef struct
{
	unsigned int flow;					   /* 统计个数 */
    int flowForward;                       /* 正向流量统计 */
    int flowBackward;                      /* 反向流量统计 */
    int personForward;                     /* 人流量正向统计 */
    int personBackward;                    /* 人流量反向统计 */
    int vehicleForward;                    /* 车流量正向统计 */
    int vehicleBackward;                   /* 车流量反向统计 */
    int bicycleForward;                    /* 非车流量正向统计 */
    int bicycleBackward;                   /* 非车流量反向统计 */
    int unknowForward;                     /* 未知目标正向统计 */
    int unknowBackward;                    /* 未知目标反向统计 */
} IVS_eventFlowStat_t;

/* 密集状态 */
typedef enum
{
	IVS_DENSITY_RARE                = 1 << 0,	/* 很稀疏 */
	IVS_DENSITY_SPARSE              = 1 << 1,	/* 稀疏 */
	IVS_DENSITY_DENSE   			= 1 << 2,	/* 密集 */
    IVS_DENSITY_CROWDED             = 1 << 3,	/* 拥挤 */
} IVS_densityState_t;


/* 密集检测 */
typedef struct
{
	IVS_densityState_t state;			/* 密集状态 */
    int person_count;                     /*!< 区域内计数：人个数 */
	int vehicle_count;                    /*!< 区域内计数：机动车个数 */
	int bicycle_count;                    /*!< 区域内计数：非机动车个数 */
	int unknown_count;                    /*!< 区域内计数：其他个数 */
} IVS_eventDensityState_t;


typedef enum
{
	IVS_IMAGETYPE_JPEG_HIGH,		    /* JPEG格式，高分辨率图片 */
	IVS_IMAGETYPE_JPEG_LOW,		        /* JPEG格式，低分辨率图片 */
	IVS_IMAGETYPE_JPEG_BMP,			    /* BMP格式图片 */
} IVS_imageType_t;


/* 图片数据信息 */
typedef struct
{
	IVS_imageType_t type;	            /* 图片类型 */
    int width;                          /* 图像宽 */
    int height;                         /* 图像高 */
	int datalen;					    /* 图片数据长度 */
	char *pData;					    /* 图片数据 */
} IVS_eventImage_t;


/* 图片数据信息 */
typedef struct									
{
	int confidence;                     /* 人脸分数 */
    int id;                             /* 人脸ID */
    IVS_rect_t  rcFace;                 /* 人脸区域 */
    IVS_rect_t  extRcFace;              /* 人脸扩展区域 */
    void *handBmp;                      /*BMP pack 句柄*/
    void *handFace;                     /*face pack 句柄*/
    void *handImage;                    /*原图 pack 句柄*/
    int faceType;						/* 是否是第一张人脸，0：不是             1：是   */ 
	int age;						    /* 年龄，-1：未知 */
	int sex;							/* 性别，-1：未知 0：男性 1:女性 */
} IVS_eventFace_t;

/* 人车非类型 */
typedef enum
{
	IVS_PVN_VEHICLE,					/* 机动车 */
	IVS_PVN_PEDESTRIAN,					/* 行人 */
	IVS_PVN_NONMOTOR,					/* 非机动车 */
} IVS_pvnType;

/* 人车非报警信息 */
typedef struct									
{
	IVS_pvnType pvnType;				/* 物体类型 */
	int confidence;                     /* 分数 */
	int id;                             /* ID */
    IVS_rect_t rect;                 	/* 区域 */
    void *handLow;                     	/*小图 pack 句柄*/
    void *handHigh;                    	/*大图 pack 句柄*/
} IVS_eventPvn_t;


/* 比对结果信息 */
typedef struct
{
	float matchRate;				    /* 相似度 */
	char name[48];						/* 姓名，空：未知 */
	char lib[48];						/* 库名，空：未知 */
}IVS_compInfo_t;


/* 人脸比对事件 */
typedef struct									
{
    int id;                             /* 人脸ID */
	IVS_compInfo_t info[16];			/* 比对信息 */
	int num;				            /* 比中个数 */
	void *handImg;                      /* 人脸图片 */
} IVS_eventComp_t;


typedef struct									
{
	int humanNumber;					/*人形个数*/
} IVS_eventHuman_t;


/* 视频分析规则类型 */
typedef enum 
{
    IVS_EVENT_CROSSLINE,                /* 越线检测 */
    IVS_EVENT_CROSSREGION,              /* 区域检测 */
    IVS_EVENT_LEFT,                     /* 物品遗留/遗洒检测 */
    IVS_EVENT_WANDER,                   /* 徘徊检测 */
    IVS_EVENT_NUMSTAT,                  /* 数量统计 */
    IVS_EVENT_CROSSFENCE,               /* 翻越围栏检测 */
    IVS_EVENT_TAKEAWAY,                 /* 物品搬移检测 */
    IVS_EVENT_RETROGRADE,               /* 逆行检测 */
    IVS_EVENT_DENSITY,	                /* 人群密度检测 */
    IVS_EVENT_FACE,                     /* 人脸检测 */    

    IVS_EVNET_ALGDEBUG,             /*算法调试事件*/

    IVS_EVNET_PANELLONGTIME,        /*人员长时间操作*/
    IVS_EVNET_PANELEXIT,            /*人员离开*/
    IVS_EVNET_PANELENTER ,          /*人员进入*/
    IVS_EVNET_PANELPASTE,           /*面板贴条检测*/
    IVS_EVNET_PANELKEYBOARD,        /*键盘异物检测*/
    IVS_EVNET_PANELCARDPORT,        /*插卡口异物检测*/
    IVS_EVNET_PANELKEYMASK,         /*键盘罩异物检测*/
    
    IVS_EVNET_FACENOMAL,            /*单人脸检测*/
    IVS_EVNET_FACEUNNOMAL,          /*异常人脸检测*/
    IVS_EVNET_FACEMANY ,            /*多人脸检测*/
    
    IVS_EVNET_TANKSMASH,            /*防护舱打砸*/
    IVS_EVNET_TANKLIEDOWN ,         /*防护舱人员倒地*/
    IVS_EVNET_TANKBAGGAGE,          /*防护舱丢包*/
    IVS_EVNET_TANKFOLLOW,           /*防护舱尾随*/
    IVS_EVNET_TANKFIGHTING,         /*防护舱打架*/
    IVS_EVNET_TANKHIJACKING,        /*防护舱挟持*/
    IVS_EVNET_TANKPUSH,             /*防护舱强推*/
    IVS_EVNET_TANKFIRE,             /*防护舱纵火*/
    
    IVS_EVNET_SCENEBAGGAGE,         /*自助厅丢包*/
    IVS_EVNET_SCENELIEDOWN ,        /*自助厅倒地*/
    IVS_EVNET_MANYPEOPLEINREGION,   /*自助厅尾随*/
    IVS_EVNET_SCENELINGERING ,      /*自助厅徘徊*/
    IVS_EVNET_SCENEGATHERING  ,     /*自助厅人员聚集*/
    IVS_EVNET_SCENEFORBIDDEN ,      /*自助厅人员禁止区域*/
    IVS_EVNET_SCENEMULTIPEOPLE  ,   /*自助厅疑似尾随*/
    IVS_EVNET_SCENEFIGHTING ,       /*自助厅人员打架*/
    IVS_EVNET_SCENEHIJACKING  ,     /*自助厅人员劫持*/
    IVS_EVNET_SCENETRACK ,          /*自助厅人员跟踪*/
    
    IVS_EVNET_DISTRICTFGCHANGE,     /*加钞间运动入侵*/
    IVS_EVNET_DISTRICTHUMENNUMS ,   /*加钞间人数异常*/
    

    IVS_EVNET_VQDSBLOCK,            /*VQDS 遮挡报警*/
    IVS_EVNET_VQDSOFFFOCUS,         /*VQDS 模糊报警*/
    IVS_EVNET_VQDSMOVE,             /*VQDS 位移报警*/
    IVS_EVNET_VQDSCOLOR,            /*VQDS 偏色报警*/
    IVS_EVENT_HDCTFORWARD,          /* 正向人数 */
    IVS_EVENT_HDCTBACKWARD,         /* 反向人数 */
    IVS_EVENT_HDCTNUMABNORMAL,       /* 人数异常 */
    IVS_EVENT_HDCTFOLLOW,           /* 深度相机尾随 */ 
    IVS_EVENT_HUMAN   ,              /* 人形检测 */  

    IVS_EVENT_FASTMOVE,             /*快速移动*/
    IVS_EVENT_LONGTIME,             /*长时间逗留*/
    
    IVS_EVENT_COMP,                 /*人脸比对*/
    IVS_EVENT_PERSONCARNONMOTOR,    /*人车非检测*/
} IVS_eventType_t;

//报警子类型
typedef enum 
{
	IVS_EVENTSUB_REDCAST=1,
	IVS_EVENTSUB_BLUECAST,
	IVS_EVENTSUB_GREENCAST,
	IVS_EVENTSUB_YELLOWCAST,	
	
}IVS_eventSubType_t;

typedef struct 
{
    int Score;          /*分数*/
    int subType;        /*报警子类型*/
    IVS_rect_t rcRect;   /*报警区域*/
}IVS_EventRoi_t;

typedef struct 
{
	int			nATMWarns;  /*报警个数*/
	int			nATMBlocks; /*面板遮挡累计次数*/
	int			nProbeBlocks;/*人脸遮挡*/
	int			nFaceTrackID;/*算法帧率*/

	char			bATMProbe;/*算法关联状态*/
	char			bATMMoving;/*人员活动状态*/
	char			bATMHands;/*人员操作状态*/
	char			bATMDebugEnable;/*算法调试状态*/
}IVS_AtmPanelDebug_t;

typedef struct 
{
	char			bFaceCheckMove;/*人脸检测活动状态*/
	char			bFaceStay;/*是否有人*/

	char			bFaceDebugEnable;
}IVS_AtmFaceDebug_t;

typedef struct 
{
	int			nTankHeads;/*人头计数*/
	int			nHead1Id;/*人头1站位*/
	int			nHead2Id;/*人头2站位*/
	int			nMovingChecks;/*人员活动数值*/

	char			bTankDebugEnable;
}IVS_TankDebug_t;

typedef struct 
{
	char			bDistrictDebugEnable;
	int			nLineCrossNums; /*人员跨线计数*/
}IVS_DistrictDebug_t;


/*深度人数调试信息*/
typedef struct 
{
    char	bHeadCntDebugEnable;
    int		nLineCrossNums;             /* 记在区域内跨线人数 */
    int		nforwordNums;               /* 正向计数 */
    int		nbackwordNums;              /* 反向计数 */
}IVS_DeepCntDebug_t;

/*关键点信息*/
typedef struct 
{
    IVS_rect_t rcRect;                  /*报警区域*/
    int rectIndex;                      /*报警区域 哪个边触发*/
    int subInfo[4];                     /*报警子信息*/
    void *handImage;                    /*原图 pack 句柄*/
}IVS_PoseEnd_t;

/* 事件数据 */
typedef struct
{
	unsigned int			ruleId;			/* 所属规则ID  */
	IVS_eventType_t	        eventType;		/* 报警类型 */
	unsigned int			objectCount;	/* 物体数量 */
	unsigned int			objectIds[32];	/* 相关物体ID列表,底层分配置内存，应用层注意释放内存 */
    
	union
	{
        IVS_eventCrossRegion_t crossRegion;     /* 区域报警 */
        IVS_eventCrossLine_t   crossLine;		/*跨线报警*/
        IVS_eventObject_t      object;			/*盗移*/
        IVS_eventFlowStat_t flowState;          /* 人数统计 */
        IVS_eventDensityState_t densityState;		/* 密度统计 */
        IVS_eventFace_t faceEvent;              /* 人脸检测报警 */
        IVS_eventComp_t compEvent;              /* 人脸比对报警 */
        IVS_AtmPanelDebug_t AtmPanelDebug;      /*ATM面板调试信息*/
        IVS_AtmFaceDebug_t AtmFaceDebug;        /*ATM人脸调试信息*/
        IVS_TankDebug_t AtmTankDebug;           /*防护舱调试信息*/
        IVS_DistrictDebug_t DistrictDebug;      /*加钞间调试信息*/
        IVS_DeepCntDebug_t DeepCntDebug;		/*深度人数调试信息*/
        IVS_EventRoi_t EventRoi[4];
		IVS_eventHuman_t humanEvent;			/* 人形报警 */
		IVS_eventPvn_t pvnEvent;				/* 人车非报警 */
        IVS_PoseEnd_t poseEvd;                  /* 关键点信息*/
	}result;
} IVS_event_t;


/* 算法结果 */
typedef struct
{
    int                     eventNum;               /* 事件数 */
    IVS_event_t             *pEvents;               /* 事件列表 */
	int						imageNum;               /* 图片个数 */
	IVS_eventImage_t        *pImages;               /* 图片信息 */
} IVS_result_t;


//VQDS参数
typedef struct 
{
	int  UpdateGrade;					//更新参考图像标志
	
	unsigned char       bDetectBlock;          //视频遮挡 使能
	unsigned char       bDetectBlur;           //画面模糊 使能
	unsigned char       bDetectColor;          //色彩异常 使能
	unsigned char       bDetectMoved;           //画面模糊 使能 
	unsigned char       bDetecLost;           //视频丢失使能 
	
	unsigned char       nColorSensitivity;    //色彩异常 灵敏度
	unsigned char       nBlurSensitivity;     //画面模糊 灵敏度

	int                        nBlockTimeInterval;     //遮挡报警时间间隔(分)
	int                        nBlurTimeInterval;     //模糊报警时间间隔(分)
	int                        nColorTimeInterval;     //偏色报警时间间隔(小时)
	int                        nMovedTimeInterval;     //移位报警时间间隔(小时)
}IVS_vqdsConfig_t;

//调试参数
typedef struct 
{
	unsigned int 	PrintDebugFlag;//算法内部打印等级 0~5(0)
	unsigned int  	ImageDebugType;//算法内部抓图模式参照APP_DebugImageType
	unsigned int   	ImageIntervalTime;//算法内部抓图时间间隔0~200秒(10)
	unsigned int  	ImageDebugBufferNums;//一帧图像的内部图像张数1~10(1)
	unsigned int     AlgmodeTpye;//算法检测模式
}IVS_debugConfig_t;
//命令参数
typedef struct 
{
	int BackGroundFlag;// =1 表示背景重置
}IVS_cmdInfoConfig_t;


typedef struct
{
    IVS_rect_t  detRoi;                 /* 人脸检测ROI */
    int maskNum;                        /* 非检测区域个数*/
    IVS_rect_t  maskRoi[10];            /* 非人脸检测ROI */
    int face_min;                       /* 算法检测的最小人脸 */
    int face_max;                       /* 算法检测的最大人脸 */
    int noDetectionWaitThresh;          /* 等待一定帧数如果没有检测，强制消失 */
    int width;                          /* 输入图像宽度 */
    int height;                         /* 输入图像高度 */
    int enTrackerNum;                   /* 多人脸同时追踪，最大为10 */
    int imgDataFormat;                  /* 输入图像数据格式(420/422...) */ 
    int detFrameRate;                   /* 多帧之中人脸检测一次设置 */
    int bEnableEnhance;                 /* 是否使用图像增强 */
    int shareFrameNum;                  /* 图像增强中某数据共用帧数设置 */
    int diffThreshold;                  /* 图像增强中帧间差分阈值 */
    int durationTime;                   /* 等待一定时间，强制返回最优人脸(单位mS)*/
    /* 人脸抓拍模式：0：一个id报警一张最优人脸；1：一个id报警第一张人脸和最优人脸；2：一个id报警第一张人脸和每个间隔时间的最优人脸 */
    int faceAlarmMode;
    int yaw;                            /* 水平角度 */
    int pitch;                          /* 垂直角度 */
    int confidence;                     /* 人脸可信度 */
} IVS_faceConfig_t;

typedef struct
{
    IVS_rect_t  detRoi;                 /* ROI检测区域 */
    int minBoxSize;                     /* 算法检测的最小尺寸 */
    int maxBoxSize;                     /* 算法检测的最大尺寸 */
    int noDetectionWaitThresh;          /* 等待一定帧数如果没有检测，强制消失 */
    int width;                          /* 输入图像宽度 */
    int height;                         /* 输入图像高度 */
    int enTrackerNum;                   /* 多人脸同时追踪，最大为10 */
    int detFrameRate;                   /* 多帧之中人脸检测一次设置 */
    int bEnableEnhance;                 /* 是否使用图像增强 */
    int durationTime;                   /* 等待一定时间，强制返回最优人脸(单位mS)*/
    /* 人脸抓图模式，0表示一个人脸id产生一张最优人脸报警，1表示一个人脸id产生第一张人脸和最优人脸报警，
	2表示一个人脸id产生每个间隔时间的最优人脸报警，3表示一个人脸id产生第一张人脸和每个间隔时间的最优人脸报警
	4表示一个人脸id产生一张最优报警后可强制报警  5表示一个人脸id产生第一张人脸和一个最优报警后可强制报警
	6表示最快抓拍一个人脸模式 */
    int alarmMode;
    int sanpTimes;						/* 抓拍次数 */
    int faceYaw;                        /* 水平角度 */
    int facePitch;                      /* 垂直角度 */
    int faceConfidence;                 /* 人脸可信度 */
    int faceQuality;					/* 人脸质量 */
    int pvnConfidence;                  /* 人车非可信度 */
    int pvnQuality;						/* 人车非质量 */
    int enableFace;						/* 使能人脸检测 */
    int enableVehicle;					/* 使能车辆检测 */
    int enablePedestrian;				/* 使能行人检测 */
    int enableNonmotor;					/* 使能非机动车检测 */
    int faceMinSize;                    /* 人脸检测的最小尺寸 */
    int vehicleMinSize;                 /* 机动车检测的最小尺寸 */
    int pedestrianMinSize;              /* 行人检测的最小尺寸 */
    int nonmotorMinSize;                /* 非机动车检测的最小尺寸 */
} IVS_dgConfig_t;

typedef struct
{
	int imgType;                           /*!< 指定图像格式，必须为枚举的类型之一 */
	int initOpts;                          /*!< 初始化选项，决定是否使用简版和打开去阴影功能，不小于0 */
    int detectingLevel;                    /*!< 灵敏度等级 */
    int widthThrd;                         /*!< 连通域阈值，目标至少拥有的宽度比例，Q10，按照图像宽度计算 */
    int heightThrd;                        /*!< 连通域阈值，目标至少拥有的高度比例，Q10，按照图像高度计算 */
    int pixThrd;                           /*!< 连通域阈值，目标至少拥有的像素数 ，传入绝对值*/
    int areaThrd;                          /*!< 连通域面积阈值占比，100最大，1最小 */
    int mergeThrd;                         /*!< 连通域融合阈值，100最大，1最小 */
    int personArea;                        /*!< 人所占的面积比例，Q12，按图像面积计算，用于目标分类 */
    int vehicleArea;                       /*!< 车所占的面积比例，Q12，按图像面积计算，用于目标分类，需大于2.2倍的"person_area" */

    int bgThrd;                            /*!< 判断为背景分布的阈值，有效值为0至100，推荐使用默认值 */ 
    int varThrd;                           /*!< 判断符合某分布的方差阈值，略微降低该值可以提高在昏暗条件下的检测结果，取值0至100 */ 
    int initialVar;                        /*!< 初始的分布方差值，降低该值可以提高低分辨环境下的结果，取值0至100 */     
    int initialWeight;                     /*!< 初始的分布权重，影响更新速度，推荐使用默认值，取值0至100 */ 
    int learningRate;                      /*!< 模型的更新率，取值0至100，目标快速运动的时候适用于高更新率 */
    int waitingThrd;                       /*!< 消失等待阈值，同一个目标等待其消失的时间，单位毫秒 */
    int distanceThrd;                      /*!< 追踪设定的距离阈值比例，百分比，有效值大于0，追踪中目标的尺寸的比例 */
    int alarmDuration;                     /*!< 事件发生后，持续监测的时间，单位毫秒 */
    int alarmCd;                           /*!< 越线报警的冷却时间，单位毫秒 */
}  IVS_bszInitParams_t;

typedef struct
{
    IVS_rect_t  detRoi;                 /* 人形检测ROI */
	int duration;						/* 最短持续时间,单位ms */
} IVS_humanConfig_t;

/* 周界十项类型 */
typedef enum
{
    IVS_BZSTYPE_CROSSLINE,          /* 越线检测 */
    IVS_BZSTYPE_CROSSREGION,        /* 区域检测 */
    IVS_BZSTYPE_LEFT,               /* 物品遗留检测 */
    IVS_BZSTYPE_WANDER,             /* 徘徊检测 */
    IVS_BZSTYPE_NUMSTAT,            /* 数量统计 */
    IVS_BZSTYPE_CROSSFENCE,         /* 翻越围栏检测 */
    IVS_BZSTYPE_TAKEAWAY,           /* 物品搬移检测 */
    IVS_BZSTYPE_RETROGRADE,         /* 逆行检测 */
	IVS_BZSTYPE_DENSITY,        	/* 人群密度检测 */
} IVS_bzsType_t;

/* 区域或线 */
typedef struct
{
	int 			pointNumber;    /* 顶点数目，折线必须不小于2，多边形不小于3 */
	IVS_point_t     points[16];		/* 构成折线或者多边形区域的点 */
} IVS_boundary_t;



/* 警戒线配置 */
typedef struct										
{
	IVS_boundary_t	detectLine;		/* 警戒线 */
	IVS_direction_t	direction;		/* 检测方向 */
} IVS_bzsCrossLine_t;

/* 警戒区入侵配置 */
typedef struct
{
	IVS_boundary_t			detectRegion;		/* 检测区域 */
} IVS_bzsCrossRegion_t;

/* 区域报警配置 */
typedef struct
{
	IVS_boundary_t			detectRegion;		/* 检测区域 */
    int                     Sensitivity;        /*灵敏度 1~100(50)*/
    int		    			minDuration; 		/* 最短持续时间，单位：秒.10~300(60)*/
} IVS_tebCrossRegion_t;

/* 翻越围栏规则 */
typedef struct										
{
	IVS_boundary_t			upstairsLine;		/* 围栏上面的一条线 */
	IVS_boundary_t			downstairsLine;		/* 围栏下面的一条线 */
} IVS_bzsCrossFence_t;

/* 遗留物品规则 */
typedef struct
{
	IVS_boundary_t			detectRegion;		/* 检测区域 */
	int		    			minDuration; 		/* 最短持续时间，单位：秒,遗留范围4s~300s，盗移范围0s~10s */
} IVS_bzsLeft_t;

/* 徘徊 */
typedef struct
{
	IVS_boundary_t			detectRegion;		/* 检测区域 */
	int		    			minDuration; 		/* 最短持续时间，单位：秒,范围5s~600s */
} IVS_bzsWander_t;

/* 行为 徘徊 */
typedef struct
{
	IVS_boundary_t			detectRegion;		/* 检测区域 */
	int		    			distance_tatol; /* 总长度，按像素*/
    int                     distance_thrd;  /*长度阀值*/
} IVS_TebWander_t;


/* 逆行 */
typedef struct
{
	IVS_boundary_t			detectRegion;		/* 检测区域 */
	IVS_point_t				direction[2];		/* 正常行驶方向；第一个点是起点，第二个点是终点，点的坐标归一化到[0,8192)区间 */
} IVS_bzsRetrograde_t;
		
/* 数量统计检测 */
typedef struct
{
	IVS_boundary_t			detectLine;			/* 检测线 */
	int	                    direction;			/* 检测方向 */
} IVS_bzsFlowstat_t;

/* 密度检测 */
typedef struct											
{
    int                     interval;           /* 报警时间间隔 单位:s */
    int                     detectMaxNum;       /*最大密度个数*/
	IVS_boundary_t			detectRegion;		/* 检测区域 */
} IVS_bzsDensity_t;

/* 行为的密度检测 */
typedef struct											
{
    int		    			minDuration; 		/* 最短持续时间，单位：秒.10~300(60)*/
    int                     detectMaxNum;       /*最大密度个数*/
    int                     detectCtl;          /*报警控制 IVS_DensityCtl_t*/
	IVS_boundary_t			detectRegion;		/* 检测区域 */
} IVS_tebDensity_t;

/* 周界规则参数 */
typedef struct
{
    int ruleId;         /* 规则id */
    int objMask;        /* 目标掩码 */
    int bzsType;        /* 周界十项类型，见定义IVS_bzsType_t */
    
    union
    {
        IVS_bzsCrossLine_t crossLine;
        IVS_bzsCrossRegion_t crossRegion;
        IVS_bzsCrossFence_t  crossFence;
        IVS_bzsLeft_t left;
        IVS_bzsLeft_t takeaway;
        IVS_bzsWander_t wander;
        IVS_bzsFlowstat_t flowstat;
        IVS_bzsRetrograde_t retrograde;
        IVS_bzsDensity_t density;
    };
} IVS_bzsRule_t;

/* 周界算法配置信息 */
typedef struct
{
    IVS_bszInitParams_t initParams;     /* 周界算法配置参数 */
    int ruleNum;                        /* 周界算法规则数 */
    int minSize;                        /* 原始分辨率上最小目标像素 */
    IVS_bzsRule_t rules[30];            /* 周界算法规则列表 */
} IVS_bzsConfig_t;


/* 人头算法配置信息 */
typedef struct
{
	IVS_rect_t              rect;               /* 检测区域 */
	int	                    dir;		    	/* 检测方向 */
	int                     min;                /* 最小人头 */
	int	                    max;		    	/* 最大人头 */
} IVS_headConfig_t;


/* 比对算法配置信息 */
typedef struct
{
	IVS_rect_t              rect;               /* 检测区域 */
	int                     min;                /* 最小人脸 */
	int	                    max;		    	/* 最大人脸 */
	int                     select;             /* 优选帧数 */
	int                     matchRate;          /* 最小相似度      0~100 */
} IVS_compConfig_t;


/* 地平线算法配置信息 */
typedef struct
{
	int                     faceEnable;     /* 人脸使能 */
	int 					headEnable;     /* 人头使能 */
	int 					compEnable;     /* 比对使能 */
	int                     faceRuleId;     /* 人脸规则id */
	int 					headRuleId;     /* 人头规则id  */
	int 					compRuleId;     /* 比对规则id  */
	IVS_faceConfig_t        face;           /* 人脸配置 */
	IVS_headConfig_t        head;           /* 人头配置 */
	IVS_compConfig_t        comp;           /* 比对配置 */
} IVS_horiConfig_t;


typedef struct
{
    unsigned int detType;                   /* 检测器类型 参考IVS_detType_t*/ 
    int trackMinSize;                       /*! 跟踪尺寸高下限 */
    int trackMaxSize;                       /*! 跟踪尺寸高上限 */
    int detectingType;                      /*!< 检测的内容，有效值为0~511 */	//default-15
    int detectingLevel;                    /*!< 灵敏度等级 */
    int learningRate;                      /*!< 模型的更新率，取值0至100，目标快速运动的时候适用于高更新率 */
    int alarmDuration;                     /*!< 事件发生后，持续监测的时间，单位毫秒 */
    int alarmCd;                           /*!< 越线报警的冷却时间，单位毫秒 */

    IVS_boundary_t processReg;              /*检测处理区域*/
    int grandHumanLineNum;                 /*地面人体站立标定线个数*/
    IVS_boundary_t grandHuman[IVS_MAX_POSE_GRANDLINE];/*地面人体站立标定线 */
}  IVS_tebInitParams_t;

/* 事件行为分析类型 */
typedef enum
{
    IVS_TEBTYPE_CROSSLINE,          /* 越线检测 */
    IVS_TEBTYPE_CROSSREGION,        /* 区域检测 */
    IVS_TEBTYPE_LEFT,               /* 物品遗留检测 */
    IVS_TEBTYPE_WANDER,             /* 徘徊检测 */
    IVS_TEBTYPE_NUMSTAT,            /* 数量统计 */
    IVS_TEBTYPE_CROSSFENCE,         /* 翻越围栏检测 */
    IVS_TEBTYPE_TAKEAWAY,           /* 物品搬移检测 */
    IVS_TEBTYPE_RETROGRADE,         /* 逆行检测 */
	IVS_TEBTYPE_DENSITY,        	/* 人群密度检测 */
	IVS_TEBTYPE_FOLLOW,             /*尾随*/
	IVS_TEBTYPE_RUNNING,            /*快速奔跑*/
	IVS_TEBTYPE_LIEDOWN,            /*倒地*/
	IVS_TEBTYPE_FIGHTING,           /*打架*/
    IVS_TEBTYPE_STAY,        		/*滞留 */
    IVS_TEBTYPE_LEAVE,        		/*离岗 */
} IVS_tybType_t;

/* 事件行为规则参数 */
typedef struct
{
    int ruleId;         /* 规则id */
    int objMask;        /* 目标掩码 */
    int tebType;        /* 事件类型，见定义IVS_tebType_t */
    
    union
    {
        IVS_bzsCrossLine_t crossLine;
        IVS_tebCrossRegion_t crossRegion;
        IVS_bzsCrossFence_t  crossFence;
        IVS_bzsLeft_t left;
        IVS_bzsLeft_t takeaway;
        IVS_TebWander_t wander;
        IVS_bzsFlowstat_t flowstat;
        IVS_bzsRetrograde_t retrograde;
        IVS_tebDensity_t density;
    };
} IVS_tebRule_t;

/*事件行为检测算法信息*/
typedef struct
{
    IVS_tebInitParams_t initParams;     /* 事件检测配置参数 */
    int ruleNum;                        /* 事件检测规则数 */
    int minSize;                        /* 原始分辨率上最小目标像素 */
    IVS_tebRule_t rules[60];            /* 事件检测规则列表 */
} IVS_tebConfig_t;

/*银行参数start*/
//ATM面板参数设置
typedef struct 
{
	int	size;	
	int	waittime;				//等待报警时间
	int	updatebk;				//更新背景时间
	int	camerablocked;			//摄像头遮挡报警时间
	int atmcamerathreold;		//ATM摄像头遮挡阀值
	int	operatorlong;			//长时间不操作时间
    int  nCmd ;                 //使能背景更新//mark
    int LineCheckThresh;        //灵敏度线阈值
    int MonitorAreaThresh;      //活动区域阈值
}IVS_atmPanel_params;

//ATM报警区域设置
typedef struct 
{
	int		size;	
	int		alarmAreaNum;
	IVS_monitorRegion_t detectArea[20];	//区域数组?
}IVS_atmArea_params;

typedef struct
{
	IVS_atmPanel_params	atm_init_params;
	IVS_atmArea_params atm_panelArea_params;
    IVS_debugConfig_t debugConfig;          /*调试配置*/
    IVS_cmdInfoConfig_t CmdInfoConfig;      /*算法命令配置*/
}IVS_AtmPanelConfig_t;

typedef struct 
{
	int		maxsizeWidth;			//检测最大像素
	int		maxsizeHeight;			//检测最大像素
	int		minsizeWidth;			//检测最小像素		
	int		minsizeHeight;			//检测最小像素	
	int		left;
	int		top;
	int		right;
	int		bottom;
}IVS_AtmFace_Area;
//ATM人脸检测区域
typedef struct 
{
	int			size;	
	int			faceBgTime;		//背景吸收时间 10~ 600(60)
	int			EnableEnhance;	//对比度增强使能
	int			Distortio_Float;                    //畸变矫正参数
	int			Image_lowLvl;                       //对比度上沿
	int			Image_HighLvl;                      //对比度下沿
	int			faceAreaNum;
	IVS_AtmFace_Area	faceArea[IVS_MAX_FACEAREA];
    IVS_rect_t FacedetectArea;                    //人脸通道人员活动区域
}IVS_atmFace_Roi;
//异常人脸参数
typedef struct 
{
    int	size;	
    int	enable;					//异常人脸参数使能开关
    int holdtime;				//遮挡持续时间
    int	tracktime;				//最大跟踪时间
    int	forebg;					//前景最小像素差阀值
    int	tagminarea;				//物体最小面积阀值
    int stillperfect;			//完全静止时间阀值
    int	stillness;				//人静止不动的最长时间阀值
    int	face;					//人脸检测阀值
    int facedetect;				//人脸检测敏感系数
    int alarm;					//持续报警
    int score;					//分数阀值
    int faceinterval;		    //最优人脸检测间隔，单位S
    int EdFaceModeMask;
    int	bFaceTimeMode;      	//是否打开时间模式0 do 1 not 
    int	bUnnormalFaceDetect;	//做异常人脸检测0 do 1 not	
    int PreDetectTime;			//预检前几秒
}IVS_atmFace_Params;

typedef struct 
{
	IVS_atmFace_Roi atm_faceArea_params;
	IVS_atmFace_Params atm_faceArnomal_params;
    IVS_debugConfig_t debugConfig;          /*调试配置*/
    IVS_cmdInfoConfig_t CmdInfoConfig;      /*算法命令配置*/
}IVS_AtmFaceConfig_t;
//自助厅区域参数配置
typedef struct
{
	int size;
	int ForGroundTh;// 前景和背景的阈值
    //人员检测参数
	int HumanHeight;// 人的高度标尺限定
	int                   human_head_min;       //最小人头，单位像素
	int                   human_head_max;       //最大人头，单位像素 
	int                   polym_thrd;           //人员聚合参数，范围内人体目标至少占有的百分比，取值0~100
	int			enableEnhance;//对比度使能开关
	int			ProcAreaGridLevel;	// 1=4*6 2=5*7 3=6*8
	int			Distortio_Float;    //畸变矫正参数
	int			Image_lowLvl;       //对比度增强上沿
	int			Image_HighLvl;      //对比度增强下沿
	IVS_monitorRegion_t ProcArea;// 处理区域

	int AtmProcAreaNum;
	IVS_monitorRegion_t AtmProcArea[10];//取款区域

	int ForbidAreaNum;
	IVS_monitorRegion_t ForbidArea[10];	

	IVS_monitorRegion_t GrandArea;// 地板区域
    //多人尾随
	int					MultiLineNum;
	IVS_monitorRegion_t  MultiLine[8]; 
}IVS_ssbArea_Params;
//自助厅报警参数配置
typedef struct 
{
	int nCmd;
//丢包参数
	short   nMinSize;						/* Min object size(width or height) in pixel. (8)	*/
	short   nMaxRectArea;					/* Max object area in rectangle.			(1600)	*/
	short   nMinFgArea;					/* Min object area in foreground.			(100)	*/
	short   nFramesTh;					/* Object still frame count.				(30)	*/
//徘徊参数
	int     nBlockCnt;						/* Moving distance.							(20，0表示此规则无效)	*/
	short   nStayingFrames;					/* Presence time in frame.	存在总时间(0表示此规则无效)	*/
	short   nStayingValidFrames;			/* Presence time in frame in valid region.	ATM区域前停留时间(200, 0表示此规则无效)		*/
//多人聚集
	short	nPersonCnt;						/* People number.		(4)							*/
	short	nPersonIntervalFrames;				/* Warning interval time in frame.		(1000 frames,约100秒)	*/
	int		nPersonFrameCnt;						/* Time threshold in frame if multi-people presence. (100) */
//倒地参数
	short 	nFaceChState;					//人脸通道状态0 嘈杂1 安静
	int		nLieDownFrameCnt;	
//人员尾随
	short	nATMRegionFrameCnt;						/* Time threshold in frame if suspicious behavior.	(20 frames)*/
	short	nATMRegionIntervalFrames;				/* Interval time in frame. 	*/		
//禁止区域
	short	nForbidRegionFrameCnt;						/* Time threshold in frame if someone enter region.	(20 frames)*/
//打架报警参数老版本
#if 1
	short	nThresholdFrmCntFighting;		//	Para: 30 老版本打架时间阈值
	short	nWarningIntervalFrmsFighting;	//	Para: 1000 老版本打架时间间隔
	short	nThresholdFightThInFrame;		//	Para: 100 (0-256) 老版本帧内判定报警的阈值,越小越容易报
	short	nThresholdFightThInFramePixel;	//	Para: 2 (1/2/3/4) 越小越容易报老版本帧内判断像素
	short	nFrameGrayChangeTh;			// Para: 30   (1-250) 老版本 帧间变化灰度阈值
	short	bFightingFlag;				//Para:0 (0/1) s是否开启打架功能
#endif
//打架报警参数新版本
//add by lubin 2016.12.1
	int                   nFightingTimeThrd;    //打架时间阈值，打架至少持续一段时间才发生报警，单位毫秒（ms）
	int                   nFightingSensitiveThrd;//打架检测灵敏度，分为5个等级，灵敏度依次降低，取值1~5
	int   		     nHijackingBehaveThrd;//劫持行为限制取值0~1024
//人员打砸参数
	int		nSmashTimeThrd;//打砸剧烈阈值1~100 (30)
//强行推入参数
	int		nHumanStayInTankTime;//人员待里面的时间。 20~100 (25)

	int		nPushingIntervalFrms; //推入报警间隔 1~100 (10)
//纵火参数
	int		nFireFrameSum;// 判断累计帧数   1~10(3) 越小越灵敏
	int		nFireBlockThrd;//判断火焰阈值  500~1500(950) 越小越灵敏
	int		nFireIntervalFrms;// 纵火报警间隔s    1~100 (10) 
}IVS_ssbWarning_Params;
//摄像头参数配置
typedef struct 
{
	unsigned char byBrightSensitivity;/* 0~100 (50)*/
	unsigned char byNoSignalSensitivity; /* 0 */
	unsigned char byBlockSensitivity;/*1~3 (1)*/
	unsigned char byColorSensitivity;/*0~100(65)*/
	unsigned char byBlurSensitivity;/*0~10 (5)*/
	unsigned char byNoiseSensitivity;/*0~10 (5)*/

	int  nAlarmDurationTh;/*second 1~10 (1)*/
	int  nBrightTh;/*5 ~60 (25)*/

}IVS_ssbCamera_Params;
//自助厅和防护舱的参数
typedef struct 
{
	IVS_ssbArea_Params ssb_sceneArea_params;
	IVS_ssbWarning_Params ssb_sceneWarning_params;
	IVS_ssbCamera_Params ssb_camera_params;
    IVS_debugConfig_t debugConfig;          /*调试配置*/
    IVS_cmdInfoConfig_t CmdInfoConfig;      /*算法命令配置*/    
}IVS_ssbConfig_t;

//加钞间参数配置
typedef struct 
{
	IVS_monitorRegion_t polProcRegion;		// 处理区域，默认4个点，包含全图
	int			 nThFg;				// 前景阈值(30)
	int			 nThArea;			// 前景运动物体大小参数(8)
	int			merge_thrd;         //联通阈值
	int 			learning_rate;  //学习速率
	int			 nWarningInterval;	// 两次报警时间间隔，(100 秒)
	IVS_rect_t	 rcNoProcess[10];	// 不处理区域
	int			 nNoProcess;		// 不处理区域个数 (0)
	int			 nHumanNumsInterval;//人数异常报警间隔
	int			FirstCountTime;//第一个人和第二个人的间隔。
	IVS_monitorRegion_t humanCountLine;

}IVS_districtinit_Params;

typedef struct 
{
    IVS_districtinit_Params disrictInit;    /*加钞间初始化参数*/
    IVS_debugConfig_t debugConfig;          /*调试配置*/
    IVS_cmdInfoConfig_t CmdInfoConfig;      /*算法命令配置*/
}IVS_districtConfig_t;
/*银行参数end*/

/*深度人数参数start*/
typedef struct 
{
    IVS_monitorRegion_t humanCountRegion; 	/* 检测区域 */
    IVS_monitorRegion_t calibrationRegion; 	/* 标定区域 */
    int					nHumanNumsInterval;	/* 人数异常报警间隔, 单位秒 */
    int					FirstCountTime;		/* 第一个人和第二个人的间隔, 单位秒 */
    IVS_monitorRegion_t humanCountLine;  	/* 跨线 */
    int  				StdNum;	            /* 基准人数 */
    int                 cntAlarmInterVal;   /*人数统计报警间隔*/
	int                 followAlarmInterVal;/*深度相机尾随报警间隔*/
	int                 followInterVal;     /*深度相机尾随判定时间*/
    int                 fastMoveInterVal;   /*快速移动报警间隔*/
	int                 longDistanceInterVal;/*行程过长报警间隔*/
    int                 longTimeInterVal;   /*长时间逗留报警间隔*/
	int                 peopleCrowInterVal;/*人员过多报警间隔*/

    int                 cntAlarmPicFlag;    /*人数报警图片使能*/
    int minHeadSize;            //最小人头宽（像素）
}IVS_deepcntinit_Params;

typedef struct 
{
    IVS_deepcntinit_Params deepcntinit;     /*深度初始化参数*/
    IVS_debugConfig_t debugConfig;          /* 调试配置 */
    IVS_cmdInfoConfig_t CmdInfoConfig;      /* 算法命令配置 */
}IVS_deepCntConfig_t;
/*深度人数参数 end*/

/* 单个智能配置参数 */
typedef struct
{
    union
    {
        IVS_AtmPanelConfig_t atmPanelConfig;    /* 面板配置 */
        IVS_AtmFaceConfig_t atmFaceConfig;      /* 人脸配置 */
        IVS_ssbConfig_t    ssbConfig;           /* 自助厅配置 */
        IVS_districtConfig_t districtConfig;    /* 加钞间配置 */
        IVS_faceConfig_t  faceConfig;       	/* 人脸配置 */
        IVS_bzsConfig_t   bzsConfig;        	/* 周界配置 */
        IVS_vqdsConfig_t vqdsConfig;       	 	/* VQDS配置*/
        IVS_deepCntConfig_t deepcntConfig;		/* 深度人数配置 */	
		IVS_humanConfig_t  humanConfig;       	/* 人形配置 */
        IVS_tebConfig_t tebConfig;              /* 事件行为配置*/
		IVS_headConfig_t headConfig;            /* 人头配置 */
		IVS_horiConfig_t horiConfig;            /* 地平线配置 */
		IVS_dgConfig_t dgConfig;            	/* 格灵深瞳算法配置 */
    };
} IVS_config_t;


/* 多个智能配置参数 */
typedef struct
{
    int configNum;
    IVS_config_t *pConfigs;
} IVS_configs_t;


/* 智能分析格式参数 */
typedef struct
{
    IVS_picSize_t       srcSize;                      /* 原始图像尺寸 */ 
    float	            fps;                          /* 帧率 */
} IVS_formatPrm_t;

/* 智能抓图参数 */
typedef struct
{
	int	            snapType;                      /* 智能抓图类型,0:大图,1:小图 */
	int 			snapQuality;				   /* 智能抓图图像质量,0--100,100质量最好 */
    IVS_picSize_t	snapSize;                      /* 智能抓图尺寸 */ 
} IVS_snapPrm_t;

//防护舱接入参数
typedef enum 
{
	IVS_TANKSIGNAL_ENTER, //人员进入
	IVS_TANKSIGNAL_EXIT,	//人员离开
	IVS_TANKSIGNAL_LIEDOWN,//人员晕倒
	IVS_TANKSIGNAL_DOORLOCK,//门磁锁上
	IVS_TANKSIGNAL_DOOROPEN,//门磁打开
	IVS_TANKSIGNAL_GATHERING,//多人进入
	IVS_TANKSIGNAL_FIGTING,//异常晃动
	IVS_TANKSIGNAL_SHACKING,//防护舱震动
	IVS_TANKSIGNAL_ONLINE, //防护舱接入上线(第一次接收到心跳包)
	IVS_TANKSIGNAL_OFFLINE,//防护舱断开(一段时间内无法接收到心跳包)

    IVS_CNTSIGNAL_CLEAR,// 人数统计清空累计
    IVS_CNTSIGNAL_COMBINE,// 人数统计清空累计
}IVS_signalType_t;
    
/* 智能分析辅助信号参数 */
typedef struct 
{
	IVS_signalType_t signal_type;
    int reserver[32];
}IVS_signalPrm_t;


/* 人脸算法强制报警配置参数 */
typedef struct
{
    int id;                 /* 强制抓图人脸Id */
}IVS_faceForceAlarm_t;


/* 强制报警配置参数 */
typedef struct 
{
    int reserved[32];
    
    union
    {
        IVS_faceForceAlarm_t faceForceAlarm;
        int reserved1[64];
    };
}IVS_forceAlarmPrm_t;


/*=============================================================================
                             Extern Variables                                  
=============================================================================*/


/*=============================================================================
                             Local Variables                                  
 =============================================================================*/


/*=============================================================================
                             Function Definition                                  
 =============================================================================*/
/*******************************************************************************
  Function:     IVS_Init
  Description:  初始化算法资源
  Input:        无
  Output:       无
  Return:       0: 操作成功
                -1: 操作失败
  Others:       无
*******************************************************************************/
int IVS_Init(void);


/*******************************************************************************
  Function:     IVS_DeInit
  Description:  注销算法
  Input:        无
  Output:       无
  Return:       0: 操作成功
                -1: 操作失败
  Others:       无
*******************************************************************************/
int IVS_DeInit(void);


/*******************************************************************************
  Function:     IVS_Create
  Description:  初始化算法，分配算法内存
  Input:        - pCreateParam: 智能算法初始化参数
  Output:       无
  Return:       !NULL: IVS算法句柄
                NULL: 操作失败
  Others:       无
*******************************************************************************/
void *IVS_Create(IVS_createParam_t *pCreateParam);

/*******************************************************************************
  Function:     IVS_Destory
  Description:  算法注销
  Input:        - hIvs: IVS算法句柄
  Output:       无
  Return:       0: 操作成功
                -1: 操作失败
  Others:       无
*******************************************************************************/
int IVS_Destory(void *hIvs);

/*******************************************************************************
  Function:     IVS_SetFormat
  Description:  设置智能分析格式
  Input:        - hIvs: IVS算法句柄
                - pFormat: 智能分析格式参数
  Output:       无
  Return:       0: 操作成功
                -1: 操作失败
  Others:       无
*******************************************************************************/
int IVS_SetFormat(void *hIvs,
                  IVS_formatPrm_t *pFormat);


/*******************************************************************************
  Function:     IVS_SetConfig
  Description:  设置智能算法配置
  Input:        - hIvs: IVS算法句柄
                - pConfig: 智能配置
  Output:       无
  Return:       0: 操作成功
                -1: 操作失败
  Others:       无
*******************************************************************************/
int IVS_SetConfig(void *hIvs, IVS_config_t *pConfig);


/*******************************************************************************
  Function:     IVS_QuitResult
  Description:  强制算法取结果接口返回
  Input:        - hIvs: IVS算法句柄
  Output:       无
  Return:       0: 操作成功
                -1: 操作失败
  Others:       无
*******************************************************************************/
int IVS_QuitResult(void *hIvs);


/*******************************************************************************
  Function:     IVS_GetRegion
  Description:  获取智能算法区域信息
  Input:        - hIvs: IVS算法句柄
                - pRegion: 智能算法结果
  Output:       无
  Return:       0: 操作成功
                -1: 操作失败
  Others:       无
*******************************************************************************/
int IVS_GetRegion(void *hIvs, IVS_region_t *pRegion);


/*******************************************************************************
  Function:     IVS_GetResult
  Description:  获取智能算法结果
  Input:        - hIvs: IVS算法句柄
                - pResult: 智能算法结果
  Output:       无
  Return:       0: 操作成功
                -1: 操作失败
  Others:       无
*******************************************************************************/
int IVS_GetResult(void *hIvs, IVS_result_t *pResult, int block);


/*******************************************************************************
  Function:     IVS_SetModuleState
  Description:  设置模块状态
  Input:        - hIvs: IVS算法句柄
                - state: 0-正常工作, 1-暂停
  Output:       无
  Return:       0: 操作成功
                -1: 操作失败
  Others:       无
*******************************************************************************/
int IVS_SetModuleState(void *hIvs, int state);


/*******************************************************************************
  Function:     IVS_GetVersions
  Description:  获取各算法版本信息
  Input:        - hIvs: IVS算法句柄
                - pVersion:存放版本信息的指针
  Output:       无
  Return:       0: 操作成功
                -1: 操作失败
  Others:       无
*******************************************************************************/
int IVS_GetVersions(void *hIvs, IVS_version_t *pVersion);


/*******************************************************************************
  Function:     IVS_SendSignal
  Description:  给各算法发送辅助信号
  Input:        - hIvs: IVS算法句柄
                - pSingalPrm:存放辅助信号参数的指针
  Output:       无
  Return:       0: 操作成功
                -1: 操作失败
  Others:       无
*******************************************************************************/
int IVS_SendSignal(void *hIvs, IVS_signalPrm_t *pSingalPrm); 


/*******************************************************************************
  Function:     IVS_RequestForceAlarm
  Description:  智能请求强制报警
  Input:        - hIvs: IVS算法句柄
                - pForceAlarmPrm: 强制报警参数
  Output:       无
  Return:       0: 操作成功
                -1: 操作失败
  Others:       无
*******************************************************************************/
int IVS_RequestForceAlarm(void *hIvs, IVS_forceAlarmPrm_t *pForceAlarmPrm);


/*******************************************************************************
  Function:	   IVS_GetDelay
  Description: 算法结果返回数据帧跟视频帧延迟时间
  Input:       - hIvs: IVS算法句柄
  Output:	   - pTime: 数据帧跟视频帧延迟时间
  Return:	   0: 操作成功
			   -1: 操作失败
  Others:	   无
*******************************************************************************/
int IVS_GetDelay(void *hIvs, unsigned int *pTime);

/*******************************************************************************
  Function:	   IVS_SetSnapFormat
  Description: 设置智能抓图参数
  Input:       - hIvs: IVS算法句柄
  Output:	   - pSnapPrm: 智能抓图参数
  Return:	   0: 操作成功
			   -1: 操作失败
  Others:	   无
*******************************************************************************/
int IVS_SetSnapFormat(void *hIvs, IVS_snapPrm_t *pSnapPrm);

#ifdef __cplusplus
}
#endif

#endif /* ZNIVS_H */
